Micron Document
<!DOCTYPE html>
<html class="client-nojs vector-feature-language-in-header-enabled vector-feature-language-in-main-page-header-disabled vector-feature-page-tools-pinned-disabled vector-feature-toc-pinned-clientpref-0 vector-toc-not-available vector-feature-main-menu-pinned-disabled vector-feature-limited-width-clientpref-1 vector-feature-limited-width-content-enabled vector-feature-custom-font-size-clientpref-1 vector-feature-appearance-pinned-clientpref-0 skin-theme-clientpref-day vector-sticky-header-enabled" lang="de" dir="ltr"><head>
<meta charset="UTF-8">
<title>Overlay (Programmierung)</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="icon" type="image/png" href="./_res_/favicon.png">
<link rel="canonical" href="https://de.wikipedia.org/wiki/Overlay_(Programmierung)"> <link href="./_mw_/ext.cite.styles.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.pygments.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.wikimediamessages.styles.css" rel="stylesheet" type="text/css">
<link href="./_mw_/skins.vector.icons.css" rel="stylesheet" type="text/css">
<link href="./_mw_/skins.vector.search.codex.styles.css" rel="stylesheet" type="text/css">
<link href="./_mw_/skins.vector.styles.css" rel="stylesheet" type="text/css">
<meta name="ResourceLoaderDynamicStyles" content="">
<link href="./_mw_/ext.gadget.citeRef.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.defaultPlainlinks.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.dewikiCommonHide.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.dewikiCommonLayout.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.dewikiCommonStyle.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.dewikiDarkmode.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.dewikiResponsive.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.specialSearch.css" rel="stylesheet" type="text/css">
<link rel="stylesheet" type="text/css" href="./_mw_/site.styles.css">
<link rel="stylesheet" type="text/css" href="./_mw_/noscript.css">
<link rel="stylesheet" type="text/css" href="./_res_/footer.css">
<link rel="stylesheet" type="text/css" href="./_res_/vector-2022.css">
</head>
<body class="skin--responsive skin-vector skin-vector-search-vue mediawiki ltr sitedir-ltr mw-hide-empty-elt ns-0 ns-subject page-Overlay_Programmierung rootpage-Overlay_Programmierung skin-vector-2022 action-view">
<div class="mw-page-container">
<div class="mw-page-container-inner">
<div class="mw-content-container">
<main id="content" class="mw-body">
<header class="mw-body-header vector-page-titlebar">
<h1 id="firstHeading" class="firstHeading mw-first-heading"><span class="mw-page-title-main">Overlay (Programmierung)</span></h1>
</header>
<a id="top"></a>
<div id="bodyContent" class="vector-body ve-init-mw-desktopArticleTarget-targetContainer" aria-labelledby="firstHeading" data-mw-ve-target-container="">
<div id="contentSub">
<div id="mw-content-subtitle"></div>
</div>
<div id="mw-content-text" class="mw-body-content mw-content-ltr" lang="de" dir="ltr"><div class="mw-content-ltr mw-parser-output" lang="de" dir="ltr">
<p>Als <b>Overlay</b> bezeichnet man einen Teil eines <a href="Maschinensprache#Maschinenprogramm" title="Maschinensprache">Computerprogramms</a>, das in einen Bereich des <a href="Arbeitsspeicher" title="Arbeitsspeicher">Arbeitsspeichers</a>, der wechselweise von mehreren Programmteilen (Overlays) gemeinsam genutzt wird, geladen und dort ausgeführt wird.
</p>

<div class="mw-heading mw-heading2"><h2 id="Problemstellung">Problemstellung</h2></div>
<p>Über viele Jahre reichte der verfügbare <a href="Random-Access_Memory" title="Random-Access Memory">RAM</a>-Speicher in Computern nicht aus, um komplexe ausführbare Programme im Ganzen zu laden.
</p><p>In den 1960er Jahren verfügten selbst Großrechner nur über kleine maximale Speichergrößen im Bereich einiger 100&nbsp;kB, für aufwendige Rechenprogramme entschieden zu wenig. Man entwickelte deshalb Methoden, aus einem relativ kleinen Hauptprogramm, in dem zum Beispiel alle Speicherbereiche für permanente Daten angelegt wurden, dynamisch Unterprogramme (und weitere Unterprogramme dazu) zum Hauptprogramm hinzu zu laden (über Level-Techniken), wobei der zuvor geladene Programmcode desselben Levels überschrieben wurde.
</p><p>Gesteuert wurde das über Kontrollbefehle im Source-Code des gesamten Programm(-pakets). Hier als Beispiel (aus einem FORTRAN-Programmierhandbuch für eine CDC 6400, 1971):
</p>
<pre> Hauptprogramm
...
CALL OVERLAY (filename1, Mainlevel1, SubLevel0, ...ggf. weitere Parameter) *1
CALL OVERLAY (filename2, Mainlevel1, SubLevel1, ...ggf. weitere Parameter) *2
...
CALL OVERLAY (filename3, Mainlevel1, SubLevel2, ...ggf. weitere Parameter) *3
...
CALL OVERLAY (filename4, Mainlevel2, SubLevel0, ...ggf. weitere Parameter) *4
...
Ende Hauptprogramm
</pre>
<pre> OVERLAY (filename1, Mainlevel1, Sublevel0, … ggf. weitere Parameter)
Fortran-Code für das gesamte OVERLAY Paket 1.0
END
OVERLAY (filename2, Mainlevel1, Sublevel1, … ggf. weitere Parameter)
Fortran-Code für das gesamte OVERLAY Paket 1.1
END
OVERLAY (filename3, Mainlevel1, Sublevel2, … ggf. weitere Parameter)
Fortran-Code für das gesamte OVERLAY Paket 1.2
END
OVERLAY (filename4, Mainlevel2, Sublevel0, … ggf. weitere Parameter)
Fortran-Code für das gesamte OVERLAY Paket 2.0
END
</pre>
<p>Das gesamte Programmpaket wurde vom Compiler übersetzt und die Overlay-Teile im unteren Teil einzeln in die jeweiligen Dateien (filename1, …2, …) geschrieben. Als Medien standen eigentlich nur <a href="Trommelspeicher" title="Trommelspeicher">Datentrommeln</a> und Bandgeräte bereit. Nach dem Anlaufen des Hauptprogramms wurden dann die Overlay-Teile nachgeladen: *1 lädt das erste Paket und sofort das erste Sub-Paket hinterher (*2). Mit *3 wird das mit *2 geladene Overlay überschrieben. Und mit *4 wird das gesamte mit *1, *2 und danach *3 geladene Overlay ersetzt.
</p><p>In den 1970er Jahren nahm die Größe der verfügbaren Speicher schnell zu und die (zeitraubende) Overlay-Technik geriet fast in Vergessenheit.
</p><p>Mit dem Aufkommen der aus hochintegrierten <a href="Halbleiter" title="Halbleiter">Halbleiterbausteinen</a> bestehenden <a href="Mikrocomputer" title="Mikrocomputer">Mikrocomputer</a> in den 1980ern verfügte man mit den 8-<a href="Bit" title="Bit">Bit</a>-<a href="Mikroprozessor" title="Mikroprozessor">Mikroprozessoren</a> <a href="Intel_8080" title="Intel 8080">Intel 8080</a> und <a href="Zilog_Z80" title="Zilog Z80">Zilog Z80</a> unter dem <a href="Betriebssystem" title="Betriebssystem">Betriebssystem</a> <a href="CP/M" title="CP/M">CP/M</a>-80 lediglich über höchstens 64 Kilobyte Arbeitsspeicher. Die <a href="IBM_Personal_Computer" title="IBM Personal Computer">IBM-PC</a> mit dem 16-Bit-Prozessor <a href="Intel_8088" title="Intel 8088">8088</a> von Intel konnten unter dem Betriebssystem <a href="MS-DOS" title="MS-DOS">MS-DOS</a> nicht mehr als 640 Kilobyte an RAM nutzen. Damit war die Größe eines ausführbaren Programms einschließlich der notwendigen <a href="Datensegment" title="Datensegment">Datensegmente</a> auf diese maximale Größe des verfügbaren Arbeitsspeichers begrenzt. Man entsann sich wieder der „alten“ Overlay-Technik.
</p>
<div class="mw-heading mw-heading2"><h2 id="Overlay">Overlay</h2></div>
<p>Quasi als Notlösung aus solchen Problemstellungen entschied man sich daher in besonderen Fällen, Computerprogramme zu modularisieren und in Teile zu splitten, die nicht gleichzeitig ausgeführt werden mussten. Diese wurden als separate Programm-Dateien realisiert. Um sie einzeln zu nutzen, wurde der dafür maximal erforderliche Speicherbereich im RAM reserviert. So konnte ein solches Modul temporär als Overlay geladen und ausgeführt sowie bei Bedarf dynamisch durch ein anderes Modul, das dorthin nachgeladen werden musste, ersetzt werden. Overlay-Dateien wurden meist durch die <a href="Dateinamenserweiterung" title="Dateinamenserweiterung">Dateiendung</a> OVR oder OVL gekennzeichnet, verbindliche Konventionen gab es aber nicht.
</p>
<div class="mw-heading mw-heading2"><h2 id="Software">Software</h2></div>
<p>Um die Aufteilung in Overlays sowie anfänglich auch das Nachladen musste sich der Programmierer selbst kümmern, also diese Funktionalität programmieren. Teilweise wurden Overlays auch durch Programmiersysteme –&nbsp;beispielsweise durch spätere Versionen von <a href="Turbo_Pascal" title="Turbo Pascal">Turbo Pascal</a>&nbsp;– unterstützt. Die Modularisierung in Programm-Dateien nach Anweisung des Programmierers erfolgte hier durch den <a href="Compiler" title="Compiler">Compiler</a> bzw. <a href="Linker_(Computerprogramm)" title="Linker (Computerprogramm)">Linker</a>, die Speicherverwaltung und das Nachladen durch das <a href="Laufzeitumgebung" title="Laufzeitumgebung">Laufzeitsystem</a>.
</p><p>Ein Programm in Turbo Pascal 3.0 könnte man sich sinngemäß etwa in folgender Form vorstellen:
</p>
<div class="mw-highlight mw-highlight-lang-pascal mw-content-ltr" dir="ltr"><pre><span></span><span class="k">program</span><span class="w"> </span><span class="n">meinprojekt</span><span class="o">;</span>
<span class="n">overlay</span><span class="w"> </span><span class="k">procedure</span><span class="w"> </span><span class="nf">kundenverwaltung</span><span class="o">;</span>
<span class="o">...</span>
<span class="n">overlay</span><span class="w"> </span><span class="k">procedure</span><span class="w"> </span><span class="nf">warenverwaltung</span><span class="o">;</span>
<span class="o">...</span>
<span class="cm">{ Hauptprogramm }</span>
<span class="k">begin</span>
<span class="k">while</span><span class="w"> </span><span class="n">input</span><span class="w"> </span><span class="o">&lt;&gt;</span><span class="w"> </span><span class="err">"</span><span class="n">ende</span><span class="err">"</span><span class="w"> </span><span class="k">do</span><span class="w"> </span><span class="k">begin</span>
<span class="w"> </span><span class="k">case</span><span class="w"> </span><span class="n">input</span><span class="w"> </span><span class="k">of</span>
<span class="w"> </span><span class="err">"</span><span class="n">kunden</span><span class="err">"</span><span class="o">:</span><span class="w"> </span><span class="n">kundenverwaltung</span><span class="o">;</span>
<span class="w"> </span><span class="err">"</span><span class="n">waren</span><span class="err">"</span><span class="o">:</span><span class="w"> </span><span class="n">warenverwaltung</span><span class="o">;</span>
<span class="w"> </span><span class="k">end</span><span class="o">;</span>
<span class="k">end</span><span class="o">;</span>
<span class="k">end</span><span class="o">.</span>
</pre></div>
<p>Ab Turbo Pascal Version 5.0 gibt es auf <a href="Unit_(Programmiersprache_Pascal)" title="Unit (Programmiersprache Pascal)">Unit</a>-Ebene den Begriff Overlay.
</p>
<div class="mw-heading mw-heading2"><h2 id="Professionelle_Nutzung">Professionelle Nutzung</h2></div>

<p>Insbesondere professionelle Software war aufgrund ihres notwendigen Funktionsumfangs zu Zeiten begrenzter Hardware von dem Problem der Speicherknappheit betroffen. Eines der seinerzeit für die Modularisierung in Overlays bekannten Programme ist die Textverarbeitungssoftware <a href="WordStar" title="WordStar">WordStar</a> mit dem Hauptprogramm WS.COM und den Overlay-Modulen WSMSGS.OVR, WSOVLY1.OVR, MAILMERGE.OVR und SPELSTAR.OVR. Auch das Datenbankprogramm <a href="DBASE" title="DBASE">dBASE</a> war entsprechend modularisiert.<sup id="cite_ref-1" class="reference"><a href="#cite_note-1"><span class="cite-bracket">[</span>1<span class="cite-bracket">]</span></a></sup> Selbst die <a href="Space_Shuttle" title="Space Shuttle">Space-Shuttle</a>-Software <i>Primary Avionics System Software (PASS)</i> verwendet Overlays.<sup id="cite_ref-2" class="reference"><a href="#cite_note-2"><span class="cite-bracket">[</span>2<span class="cite-bracket">]</span></a></sup>
</p>
<div class="mw-heading mw-heading2"><h2 id="Aktuelle_Bedeutung">Aktuelle Bedeutung</h2></div>
<p>Durch die weitere Entwicklung im Bereich Hard- und Software haben Overlays allgemein nur noch geringe Bedeutung. Allenfalls in kleinen, relativ einfachen Systemen wie <a href="Eingebettetes_System" title="Eingebettetes System">eingebetteten Systemen</a> sind Overlays noch sinnvoll.
</p><p>Auch in manchen <a href="Live-System" title="Live-System">Live-Betriebssystemen</a>, die darauf ausgerichtet sind, vom RAM-Speicher sparsam Gebrauch zu machen, findet die Overlaytechnik unter Zuhilfenahme von <a href="Kernel-Modul" title="Kernel-Modul">Kernel-Modulen</a> Verwendung.
</p><p>Moderne Computersysteme mit hinreichendem Arbeitsspeicher und linearer Adressierung sowie Betriebssystemen mit leistungsfähiger <a href="Speicherverwaltung" title="Speicherverwaltung">Speicherverwaltung</a> machen Overlays überflüssig bzw. lassen sie nicht mehr zu. Eine den Overlays ähnliche Funktionalität kann bei Bedarf mit <a href="Programmbibliothek#Dynamische_Bibliotheken" title="Programmbibliothek">dynamischen Linkbibliotheken</a> (unter Windows <a href="Dynamic_Link_Library" title="Dynamic Link Library">DLLs</a>) und Laden zur Laufzeit realisiert werden.
</p>
<div class="mw-heading mw-heading2"><h2 id="Literatur">Literatur</h2></div>
<ul><li>Rudolf Herschel, Ernst-Wolfgang Dieterich: <i>Turbo Pascal 7.0</i>. 2. Auflage. Verlag Oldenbourg, 2000, ISBN 3-486-25499-5, S. 249.</li>
<li>Alan Mabbett: <i>Getting started with WordStar, MailMerge + SpellStar</i>. Cambridge University Press, 1985, ISBN 0-521-31805-X (englisch)</li></ul>
<div class="mw-heading mw-heading2"><h2 id="Weblinks">Weblinks</h2></div>
<ul><li><span class="cite">Hans-Georg Eßer, Hochschule München: <a rel="nofollow" class="external text" href="http://hm.hgesser.de/bs-ss2009/folien/bs-ss2009-esser-06e-4up.pdf"><i>Speicherverwaltung und Dateisysteme.</i></a> (PDF)<span class="Abrufdatum"> Abgerufen am 13.&nbsp;Februar 2014</span>.</span><span style="display: none;" class="Z3988" title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Adc&amp;rfr_id=info%3Asid%2Fde.wikipedia.org%3AOverlay+%28Programmierung%29&amp;rft.title=Speicherverwaltung+und+Dateisysteme&amp;rft.description=Speicherverwaltung+und+Dateisysteme&amp;rft.identifier=http%3A%2F%2Fhm.hgesser.de%2Fbs-ss2009%2Ffolien%2Fbs-ss2009-esser-06e-4up.pdf&amp;rft.creator=Hans-Georg+E%C3%9Fer%2C+Hochschule+M%C3%BCnchen&amp;rft.date=">&nbsp;</span></li></ul>
<div class="mw-heading mw-heading2"><h2 id="Einzelnachweise">Einzelnachweise</h2></div>
<ol class="references">
<li id="cite_note-1"><span class="mw-cite-backlink"><a href="#cite_ref-1">↑</a></span> <span class="reference-text"><span class="cite"><a rel="nofollow" class="external text" href="http://corphist.computerhistory.org/corphist/documents/doc-4434569d4e6a0.pdf"><i>Ankündigung dBASE IV, Version 1.1.</i></a> (PDF) Ashton Tate, 31.&nbsp;Juli 1990,<span class="Abrufdatum"> abgerufen am 13.&nbsp;Februar 2014</span>.</span><span style="display: none;" class="Z3988" title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Adc&amp;rfr_id=info%3Asid%2Fde.wikipedia.org%3AOverlay+%28Programmierung%29&amp;rft.title=Ank%C3%BCndigung+dBASE+IV%2C+Version+1.1&amp;rft.description=Ank%C3%BCndigung+dBASE+IV%2C+Version+1.1&amp;rft.identifier=http%3A%2F%2Fcorphist.computerhistory.org%2Fcorphist%2Fdocuments%2Fdoc-4434569d4e6a0.pdf&amp;rft.publisher=Ashton+Tate&amp;rft.date=1990-07-31">&nbsp;</span></span>
</li>
<li id="cite_note-2"><span class="mw-cite-backlink"><a href="#cite_ref-2">↑</a></span> <span class="reference-text"><span class="cite"><a rel="nofollow" class="external text" href="http://www.nap.edu/openbook.php?record_id=2222&amp;page=39"><i>An Assessment of Space Shuttle Flight Software Development Processes (englisch).</i></a> The National Academies Press,<span class="Abrufdatum"> abgerufen am 13.&nbsp;Februar 2014</span>.</span><span style="display: none;" class="Z3988" title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Adc&amp;rfr_id=info%3Asid%2Fde.wikipedia.org%3AOverlay+%28Programmierung%29&amp;rft.title=An+Assessment+of+Space+Shuttle+Flight+Software+Development+Processes+%28englisch%29&amp;rft.description=An+Assessment+of+Space+Shuttle+Flight+Software+Development+Processes+%28englisch%29&amp;rft.identifier=http%3A%2F%2Fwww.nap.edu%2Fopenbook.php%3Frecord_id%3D2222%26page%3D39&amp;rft.publisher=The+National+Academies+Press&amp;rft.date=">&nbsp;</span></span>
</li>
</ol></div><!--htdig_noindex--><div><div class="zim-footer">
Dieser Artikel wurde von <a class="external text" title="Zuletzt bearbeitet am 2025-10-12" href="https://de.wikipedia.org/wiki/?title=Overlay_(Programmierung)&amp;oldid=260516417">Wikipedia</a> herausgegeben. Der Text ist unter <a class="external text" href="https://creativecommons.org/licenses/by-sa/4.0/deed.de">Creative Commons Attribution-Share Alike 4.0</a> verfügbar, sofern nicht anders angegeben. Für die Mediendateien können zusätzliche Bedingungen gelten.
</div>
</div><!--/htdig_noindex--></div>
</div>
</main>
</div>
</div>
</div>
<script src="./_webp_/webpHandler.js"></script>

</body></html>